package co.edu.uniandes.sd.mundo;
import java.io.InputStream;

import net.jxta.endpoint.Message;
import net.jxta.endpoint.MessageElement;
import net.jxta.endpoint.Message.ElementIterator;


public class ThreadManejoMensajes extends Thread{
	
	private Nodo nodo;
	
	private Message mensaje;
	
	public ThreadManejoMensajes(Nodo nodo,Message mensaje) {
		super();
		this.mensaje = mensaje;
		this.nodo = nodo;
	}


	public void run(){
		ElementIterator iterator = mensaje.getMessageElements();
		try{
			
			MessageElement el = mensaje.getMessageElement(Nodo.COMANDO);
			String cmd = el.toString();
			System.out.println("Recibi "+mensaje.toString());
			System.out.println("Comando:"+cmd);
			if(cmd.equals(Nodo.DESCARGAR_ARCHIVO)){
				String identificador = mensaje.getMessageElement(Nodo.CONTENIDO).toString();
				
				String pipeInfo = mensaje.getMessageElement(Nodo.PIPE_INFO).toString();
				System.out.println("Descarga de "+identificador+" con "+pipeInfo);
				nodo.enviarArchivo(identificador, pipeInfo);
				
			}else if(cmd.equals(Nodo.ENVIAR_ARCHIVO)){
				InputStream is = mensaje.getMessageElement(Nodo.CONTENIDO).getStream();
				String identificador = mensaje.getMessageElement(Nodo.IDENTIFICADOR).toString();
				String palabrasClave = mensaje.getMessageElement(Nodo.PALABRAS_CLAVE).toString();
				String nombre = mensaje.getMessageElement(Nodo.NOMBRE).toString();
				nodo.almacenarArchivoDescargado(nombre,identificador,palabrasClave, is);
			}else if(cmd.equals(Nodo.ARCHIVOS_CON_PALABRA_CLAVE)){
				String palabraClave = mensaje.getMessageElement(Nodo.CONTENIDO).toString();
				String pipeInfo = mensaje.getMessageElement(Nodo.PIPE_INFO).toString();
				nodo.responderArchivosConPalabraClave(palabraClave, pipeInfo);
			}else if(cmd.equals(Nodo.RESPUESTA_PALABRA_CLAVE)){
				String archivos = mensaje.getMessageElement(Nodo.CONTENIDO).toString();
				nodo.agregarRespuestas(archivos);
				System.out.println(archivos);
			}else if(cmd.equals(Nodo.ARCHIVO_MAS_PARECIDO)){
				String contenido = mensaje.getMessageElement(Nodo.CONTENIDO).toString();
				String pipeInfo = mensaje.getMessageElement(Nodo.PIPE_INFO).toString();
				long tamanio = Long.parseLong(contenido);
				nodo.responderArchivoMasParecido(tamanio, pipeInfo);
			}else if(cmd.equals(Nodo.RESPUESTA_ARCHIVO_MAS_PARECIDO)){
				String identificador = mensaje.getMessageElement(Nodo.CONTENIDO).toString();
				String tam = mensaje.getMessageElement(Nodo.TAMANIO).toString();
				long tamanio = Long.parseLong(tam);
				nodo.procesarRespuestaTamanio(identificador, tamanio);
			}
		}catch (Exception e) {
			e.printStackTrace();
		}
	}

}
